/*
 * Copyright (c) 2023 fred
 * Licensed under the Apache License,Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
import { Token } from '../Token';
import { TokenType } from '../TokenType';

export class TokenCharacter extends Token {

  asCharacter(): TokenCharacter {
    return this
  }

  private _data: string | null;

  constructor() {
    super()
    this.type = TokenType.Character
  }

  reset(): Token {
    super.reset()
    this._data = null
    return this
  }

  setData(data: string): TokenCharacter {
    this._data = data;
    return this;
  }

  getData(): string {
    return this._data
  }

  tokenType(): string {
    return "Character"
  }

  public toString(): string {
    return this.getData()
  }

  clone(): TokenCharacter {
    try {
      let clone = new TokenCharacter()
      return Object.assign(clone, this);
    } catch (e) {
      // throw new Error(JSON.parse(e))
    }
    return null
  }
}